/**
 * 图片压缩，默认同比例压缩
 * @param {Object} path 
 *   pc端传入的路径可以为相对路径，但是在移动端上必须传入的路径是照相图片储存的绝对路径/base64
 * @param {Object} obj
 *   obj 对象 有 width， height， quality(0-1)  可以传false
 * @param {Object} callback
 *   回调函数有一个参数，base64的字符串数据
 */
function canvasDataURL(path, obj, callback){
	var img = new Image();
	img.src = path;
	img.onload = function(){
		var that = this;
		// 默认按比例压缩
		var w = that.width,
			h = that.height,
			scale = w / h;
		w = obj.width || w;
		h = obj.height || (w / scale);
		var quality = 0.7;  // 默认图片质量为0.7
		//生成canvas
		var canvas = document.createElement('canvas');
		var ctx = canvas.getContext('2d');
		// 创建属性节点
		var anw = document.createAttribute("width");
		anw.nodeValue = w;
		var anh = document.createAttribute("height");
		anh.nodeValue = h;
		canvas.setAttributeNode(anw);
		canvas.setAttributeNode(anh);
		ctx.drawImage(that, 0, 0, w, h);
		// 图像质量
		if(obj.quality && obj.quality <= 1 && obj.quality > 0){
			quality = obj.quality;
		}
		// quality值越小，所绘制出的图像越模糊
		var base64 = canvas.toDataURL('image/jpeg', quality);
		// 回调函数返回base64的值
		callback(base64);
	}
}

//将以base64的图片url数据转换为Blob
function Base64UrlToBlob(urlData){
	var arr = urlData.split(','), mime = arr[0].match(/:(.*?);/)[1],
		bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
	while(n--){
		u8arr[n] = bstr.charCodeAt(n);
	}
	return new Blob([u8arr], {type:mime});
}

//图片滚动懒加载
//@className {string} 要遍历图片的类名
//@num {number} 距离多少的时候开始加载 默认 0
//比如，一张图片距离文档顶部3000，num参数设置200，那么在页面滚动到2800的时候，图片加载。不传num参数就滚动，num默认是0，页面滚动到3000就加载
//html代码
//<p><img data-src="lawyerOtherImg.jpg" class="load-img" width='528' height='304' /></p>
//<p><img data-src="lawyerOtherImg.jpg" class="load-img" width='528' height='304' /></p>
//<p><img data-src="lawyerOtherImg.jpg" class="load-img" width='528' height='304' /></p>....
//data-src储存src的数据，到需要加载的时候把data-src的值赋值给src属性，图片就会加载。
//详细可以查看testLoadImg.html

//window.onload = function() {
//	loadImg('load-img',100);
//	window.onscroll = function() {
//		loadImg('load-img',100);
//		}
//}
function loadImg(className = 'ec-load-img', num = 0, errorUrl = null) {
	let oImgLoad = document.getElementsByClassName(className);
	for (let i = 0, len = oImgLoad.length; i < len; i++) {
		//如果图片已经滚动到指定的高度
		if (document.documentElement.clientHeight + document.documentElement.scrollTop > oImgLoad[i].offsetTop - num && !oImgLoad[i].isLoad) {
			//记录图片是否已经加载
			oImgLoad[i].isLoad = true;
			//设置过渡，当图片下来的时候有一个图片透明度变化
			oImgLoad[i].style.cssText = "transition: ''; opacity: 0;";
			if (oImgLoad[i].dataset) {
				this.aftLoadImg(oImgLoad[i], oImgLoad[i].dataset.src, errorUrl, function (o) {
					//添加定时器，确保图片已经加载完了，再把图片指定的的class，清掉，避免重复编辑
					setTimeout(()=>{
						if (o.isLoad) {
							this.removeClass(o, className);
							o.style.cssText = "";
						}
					}, 1000)
				});
			} else {
				this.aftLoadImg(oImgLoad[i], oImgLoad[i].getAttribute("data-src"), errorUrl, function (o) {
					//添加定时器，确保图片已经加载完了，再把图片指定的的class，清掉，避免重复编辑
					setTimeout(()=>{
						if (o.isLoad) {
							this.removeClass(o, className);
							o.style.cssText = "";
						}
					}, 1000)
				});
			}
			(function (i) {
				setTimeout(()=>{
					oImgLoad[i].style.cssText = "transition:all 1s; opacity: 1;";
				}, 16)
			})(i);
		}
	}
}


//input选择的图片转base64
function previewFile(file,callback) {
	var reader
	if (file) {
		// 创建流对象
		reader = new FileReader()
		reader.readAsDataURL(file)
	}
	// 捕获 转换完毕
	reader.onload = function(e) {
		// 转换后的base64返回
		callback(e.target.result)
	}
}